home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Design
/
WB Collection.iso
/
workbench werkzeuge
/
bildschirmschoner
/
blitzblank_2.60
/
developer
/
modulesources
/
bb.lines.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-07
|
8KB
|
335 lines
#define __USE_SYSBASE 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <dos.h>
#include <dos/dos.h>
#include <exec/memory.h>
#include <intuition/intuitionbase.h>
#include <intuition/screens.h>
#include <intuition/intuition.h>
#include <devices/timer.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <clib/alib_protos.h>
#include <pragmas/blitzblank_pragmas.h>
#include <BlitzBlank.h>
struct Library *BlitzBlankBase;
static const char version[]="$VER: BB.Lines 2.60 (22.04.95)";
char *text[]={"\33c\33uLines\33n\n\nModule for BlitzBlank\n\nCopyright 1995\nby\nThomas Börkel",
"_Lines:",
"_Delay:"};
struct BB_Object object[]={ {&object[1],BB_VGroup,0,0,0,NULL,NULL},
{&object[2],BB_Slider,5,200,50,NULL,NULL},
{&object[3],BB_Slider,0,500,0,NULL,NULL},
{NULL ,BB_VGroup_End,0,0,0,NULL,NULL} };
struct line
{
int x1;
int y1;
int x2;
int y2;
int c;
};
struct BB_Message message;
struct BB_Screeninfo *screeninfo;
struct RastPort *rp;
struct line *li;
int dx1,dy1,dx2,dy2;
struct timerequest* inittimer (struct MsgPort *timerport)
{
struct timerequest *timerio;
if ((timerio=CreateIORequest (timerport,sizeof (struct timerequest))))
if (!(OpenDevice ("timer.device",UNIT_MICROHZ,(struct IORequest *) timerio,0)))
timerio->tr_node.io_Command=TR_ADDREQUEST;
return (timerio);
}
void waittimer (struct timerequest *timerio,int sec,int mic)
{
if (timerio)
{
timerio->tr_time.tv_secs=sec;
timerio->tr_time.tv_micro=mic;
DoIO ((struct IORequest *) timerio);
}
return;
}
/* may only be called, if starttimer() was called before */
void stoptimer (struct timerequest *timerio)
{
if (timerio)
{
AbortIO ((struct IORequest *) timerio);
WaitIO ((struct IORequest * ) timerio);
}
return;
}
/* may only be called, if no timerequest is pending */
void deletetimer (struct timerequest *timerio)
{
if (timerio)
{
CloseDevice ((struct IORequest *) timerio);
DeleteIORequest ((struct IORequest *) timerio);
}
return;
}
int sgn (long a)
{
if (a<0)
return (-1);
if (a>0)
return (1);
return (0);
}
void check (int i)
{
if (li[i].x1>screeninfo->width-1 || li[i].x1<0)
{
dx1=-dx1;
li[i].x1+=2*dx1;
}
if (li[i].y1>screeninfo->height-1 || li[i].y1<0)
{
dy1=-dy1;
li[i].y1+=2*dy1;
}
if (li[i].x2>screeninfo->width-1 || li[i].x2<0)
{
dx2=-dx2;
li[i].x2+=2*dx2;
}
if (li[i].y2>screeninfo->height-1 || li[i].y2<0)
{
dy2=-dy2;
li[i].y2+=2*dy2;
}
return;
}
void blank (void)
{
int i,colors,al,w=3,s=1,co=1,ch,stop=FALSE,v;
// struct ViewPort *vp;
struct DateStamp ds;
struct MsgPort *timerport;
struct timerequest *timerio;
al=object[1].set;
if (!(li=calloc (al+1,sizeof (struct line)))) return;
if ((timerport=CreateMsgPort ()))
{
if ((timerio=inittimer (timerport)))
{
colors=1<<screeninfo->depth;
rp=&screeninfo->bbscreen->RastPort;
// vp=&screeninfo->bbscreen->ViewPort;
DateStamp (&ds);
srand48 (ds.ds_Minute*60+ds.ds_Tick);
/*
SetRGB4 (vp,0,0,0,0);
SetRGB4 (vp,1,15,0,0);
if (colors>2)
{
SetRGB4 (vp,2,0,0,15);
SetRGB4 (vp,3,0,15,0);
if (colors>4)
{
SetRGB4 (vp,4,0,5,0);
SetRGB4 (vp,5,15,3,8);
SetRGB4 (vp,6,15,5,15);
SetRGB4 (vp,7,5,15,8);
if (colors>8)
{
SetRGB4 (vp,8,10,5,0);
SetRGB4 (vp,9,0,15,5);
SetRGB4 (vp,10,15,7,15);
SetRGB4 (vp,11,0,7,15);
SetRGB4 (vp,12,8,15,3);
SetRGB4 (vp,13,15,10,5);
SetRGB4 (vp,14,7,0,15);
SetRGB4 (vp,15,3,8,15);
if (colors>16)
for (i=16;i<colors;i++)
SetRGB4 (vp,i,(long) (drand48 ()*13+3),(long) (drand48 ()*13+3),(long) (drand48 ()*13+3));
}
}
}
*/
BBL_RainbowPalette (screeninfo->bbscreen,1,colors-1);
ch=al/colors;
if (ch==0)
ch=1;
dx1=drand48 ()*w+s;
dy1=drand48 ()*w+s;
dx2=drand48 ()*w+s;
dy2=drand48 ()*w+s;
li[0].x1=drand48 ()*screeninfo->width;
li[0].y1=drand48 ()*screeninfo->height;
li[0].x2=drand48 ()*screeninfo->width;
li[0].y2=drand48 ()*screeninfo->height;
ScreenToFront (screeninfo->bbscreen);
/*
for (i=0;i<colors;i++)
{
SetAPen (rp,i);
Move (rp,i,0);
Draw (rp,i,100);
}
Delay (200);
*/
if (!CheckSignal (SIGBREAKF_CTRL_C))
{
BBL_ModuleRunning ();
for (i=1;i<al;i++)
{
// if (object[2].set)
// TimeDelay (UNIT_MICROHZ,0,object[2].set*100);
if (object[2].set)
waittimer (timerio,0,object[2].set*100);
li[i].x1=li[i-1].x1+dx1;
li[i].y1=li[i-1].y1+dy1;
li[i].x2=li[i-1].x2+dx2;
li[i].y2=li[i-1].y2+dy2;
check (i);
if (i%ch==0)
{
co++;
if (co>colors-1)
co=1;
}
SetAPen (rp,co);
Move (rp,li[i].x1,li[i].y1);
Draw (rp,li[i].x2,li[i].y2);
if (CheckSignal (SIGBREAKF_CTRL_C))
{
i=al-1;
stop=TRUE;
}
}
if (!stop && !CheckSignal (SIGBREAKF_CTRL_C))
{
i=0;
v=al-1;
do
{
// if (object[2].set)
// TimeDelay (UNIT_MICROHZ,0,object[2].set*100);
if (object[2].set)
waittimer (timerio,0,object[2].set*100);
SetAPen (rp,0);
Move (rp,li[i].x1,li[i].y1);
Draw (rp,li[i].x2,li[i].y2);
li[i].x1=li[v].x1+dx1;
li[i].y1=li[v].y1+dy1;
li[i].x2=li[v].x2+dx2;
li[i].y2=li[v].y2+dy2;
check (i);
if (i%ch==0)
{
co++;
if (co>colors-1)
co=1;
}
SetAPen (rp,co);
Move (rp,li[i].x1,li[i].y1);
Draw (rp,li[i].x2,li[i].y2);
i++;
if (i>al-1)
{
i=0;
dx1=sgn(dx1)*(drand48 ()*w+s);
dy1=sgn(dy1)*(drand48 ()*w+s);
dx2=sgn(dx2)*(drand48 ()*w+s);
dy2=sgn(dy2)*(drand48 ()*w+s);
}
v++;
if (v>al-1)
v=0;
} while (!CheckSignal (SIGBREAKF_CTRL_C));
}
}
deletetimer (timerio);
}
DeleteMsgPort (timerport);
}
return;
}
void main(int argc,char **argv)
{
if (!(BlitzBlankBase=OpenLibrary ("blitzblank.library",BLITZBLANKLIB_VER)))
exit (0);
message.flags=BBF_Screenmode|BBF_Colors;
message.first=&object[0];
StrToLong (argv[3],(long *) &screeninfo);
screeninfo->maxdepth=8;
if (strcmp (argv[1],"BLANK")==0)
{
BBL_SendMessage (&message,argv[2]);
if (screeninfo->bbscreen)
blank ();
BBL_BlankDone ();
}
else
{
message.infotext=BBL_GetString (270,text[0]);
object[1].label=BBL_GetString (271,text[1]);
object[2].label=BBL_GetString (272,text[2]);
if (strcmp (argv[1],"CONFIG")==0)
{
BBL_SendMessage (&message,argv[2]);
}
else
{
message.first=NULL;
BBL_SendMessage (&message,argv[2]);
}
}
CloseLibrary (BlitzBlankBase);
exit (0);
}